{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "Chapter 06\n",
    "# 利用math.sin() 计算数列列表正弦值并可视化\n",
    "Book_1《编程不难》 | 鸢尾花书：从加减乘除到机器学习"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "outputs": [],
   "source": [
    "# 导入包\n",
    "import math\n",
    "import matplotlib.pyplot as plt"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-07-02T21:59:16.211901Z",
     "end_time": "2024-07-02T21:59:16.699978Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0\n"
     ]
    }
   ],
   "source": [
    "# 计算正弦值\n",
    "x_start = 0  # 弧度值\n",
    "print(math.sin(x_start))"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-07-02T21:59:16.704189Z",
     "end_time": "2024-07-02T21:59:16.758952Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-2.4492935982947064e-16\n"
     ]
    }
   ],
   "source": [
    "x_end = 2 * math.pi  # 弧度值\n",
    "print(math.sin(x_end))"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-07-02T21:59:16.727286Z",
     "end_time": "2024-07-02T21:59:16.758952Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [],
   "source": [
    "# 等差数列 a_n = a_1 + d(n – 1)\n",
    "# 数列元素数量\n",
    "num = 37\n",
    "# 计算公差\n",
    "step = (x_end - x_start) / (num - 1)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-07-02T21:59:16.743201Z",
     "end_time": "2024-07-02T21:59:16.767962Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [
    {
     "data": {
      "text/plain": "[0.0,\n 0.17453292519943295,\n 0.3490658503988659,\n 0.5235987755982988,\n 0.6981317007977318,\n 0.8726646259971648,\n 1.0471975511965976,\n 1.2217304763960306,\n 1.3962634015954636,\n 1.5707963267948966,\n 1.7453292519943295,\n 1.9198621771937625,\n 2.0943951023931953,\n 2.2689280275926285,\n 2.443460952792061,\n 2.6179938779914944,\n 2.792526803190927,\n 2.96705972839036,\n 3.141592653589793,\n 3.316125578789226,\n 3.490658503988659,\n 3.665191429188092,\n 3.839724354387525,\n 4.014257279586958,\n 4.1887902047863905,\n 4.363323129985823,\n 4.537856055185257,\n 4.71238898038469,\n 4.886921905584122,\n 5.061454830783555,\n 5.235987755982989,\n 5.410520681182422,\n 5.585053606381854,\n 5.759586531581287,\n 5.93411945678072,\n 6.1086523819801535,\n 6.283185307179586]"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成等差数列列表\n",
    "x_array = [x_start + i * step for i in range(num)]\n",
    "x_array"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-07-02T21:59:16.758952Z",
     "end_time": "2024-07-02T21:59:16.841679Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [],
   "source": [
    "# 生成等长全0列表,等价于zero_array = [0] * len(x_array)\n",
    "zero_array = [0 for i in range(num)]"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-07-02T21:59:16.783924Z",
     "end_time": "2024-07-02T21:59:16.841679Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAKvklEQVR4nO3cT4jU9x3G8c9sBEXREDHrn6hYCAZBY3VYPCxqDu6oJZBAoQihR0/+QQUhN9tS8SQ9qNBj6SFkE1wseDANIlKtEpqAUcomkGKpVFe3UFu0RHF+PRQWJIaq0czq83rBHmb8js+XvczbUbfVNE1TAECsvl5fAADoLTEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEG5SxcCRI0dqyZIlNW3atFqzZk198sknvb4SAHxvDhw4UAMDAzVz5szq7++vt99+u7744ounvjtpYmB4eLj27NlT+/btq88++6xWrlxZGzdurOvXr/f6agDwvTh9+nRt27atzp8/Xx9//HHdvXu3Op1O3bp166nutpqmaZ7qwkNas2ZNDQwM1OHDh6uqqtvt1qJFi2rHjh317rvv9vh2APD9u3HjRvX399fp06dr3bp1tWzZshodHX3g2UOHDtX27dsfa2dSfDJw586d+vTTT2vDhg0Tz/X19dWGDRvq3LlzPbwZAPTOzZs3q6pq9uzZVVV19OjRqqo6efJkXb16tS5fvlx9fX314Ycf1tatWx97Z1LEwPj4eN27d6/mzp173/Nz586ta9eu9ehWANA73W63du3aVYODg7V8+fKqqhobG6spU6bU4OBgzZs3r8bHx6vb7dbatWtr6tSpj7015UldGgB4crZt21aXLl2qM2fOTDx38eLFWrp06cQb/4ULF6q/v/8bf5h+VD39ZGBkZKTa7Xa9+uqrVVV17Nix+359bGys5s2b943zM2bMqHa7XSMjIw+98bCvsWHDxrN3Lxs2nreN7du31/Hjx+vUqVO1cOHCifOff/55rVixYuLxhQsX7nv82JoeOXr0aFNVTafTaQ4ePNjMmjWrqarmveEPmltf323+/Z+vmwWvvNL8/Jf7m1tf323eG/7gvvOdTue+8w/6etTX2LBh49m7lw0bz9vGpk2bmgULFjRffvnlN947BwYGmv379088Xr9+fbN79+7v/J7cs/9N0G63a86cOXXixIlqtVr1/vvv1zvvvFMvzHq5Xv7xz+pff/pd3R79Qy3Y+ut6YcZLdf23u2pw+Q/q9x99VK1Wq5qmqaFOp/74579W/09/9cCNR32NDRs2nr172bDxPG0sXry4rl69WidPnqzXXntt4uyLL75YU6dOrZkzZ9bw8HC9+eabVVW1aNGi2rt3b+3cufOBd3pYPftrgtHR0dq4cWO1Wq2qqtqyZUu99dZbdfefY/X33+yoO9f/Uv0/+UW9MOOlqqq6848rtXnTponzrVarfrR5c90Z/9u3bjzqa2zYsPHs3cuGjedp48qVK3Xv3r164403av78+RNfw8PD9dVXX9Xt27fr9ddfn/g9VqxYUfv27auzZ89+670eynf+bOExrV69uul0Ok23222apmm63W4zNDTUrFq9+oEfp/xw1apHOv84r7Fhw8azdy8bNp63jXa7/YB3zaer5/9mYGhoqDl48GAzNDTUVFUzMjLyRM7bsGHjyW5M1nvZsJG08bT0LAaa5n/fiHa73UyfPr1pt9v/9xvwqOdt2LDxZDcm671s2EjaeBomzY8jBgB6Y1L8BEIAoHfEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQDgxAADhxAAAhPsvvg2G/4cETb4AAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化等差数列\n",
    "plt.plot(x_array, zero_array, marker='.',\n",
    "         markersize=8,\n",
    "         markerfacecolor=\"w\",\n",
    "         markeredgecolor='k')\n",
    "plt.text(x_start, 0, '0')\n",
    "plt.text(x_end, 0, r'$2\\pi$')\n",
    "plt.axis('off')\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-07-02T21:59:16.799825Z",
     "end_time": "2024-07-02T21:59:16.933574Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [
    {
     "data": {
      "text/plain": "[0.0,\n 0.17364817766693033,\n 0.3420201433256687,\n 0.49999999999999994,\n 0.6427876096865393,\n 0.766044443118978,\n 0.8660254037844386,\n 0.9396926207859083,\n 0.984807753012208,\n 1.0,\n 0.984807753012208,\n 0.9396926207859084,\n 0.8660254037844387,\n 0.766044443118978,\n 0.6427876096865395,\n 0.49999999999999994,\n 0.3420201433256689,\n 0.1736481776669307,\n 1.2246467991473532e-16,\n -0.17364817766693003,\n -0.34202014332566866,\n -0.4999999999999997,\n -0.6427876096865393,\n -0.7660444431189779,\n -0.8660254037844385,\n -0.9396926207859082,\n -0.984807753012208,\n -1.0,\n -0.9848077530122081,\n -0.9396926207859085,\n -0.8660254037844386,\n -0.7660444431189781,\n -0.6427876096865396,\n -0.5000000000000004,\n -0.34202014332566943,\n -0.1736481776669304,\n -2.4492935982947064e-16]"
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 正弦 sin(x) 列表\n",
    "y_array = [math.sin(x_idx) for x_idx in x_array]\n",
    "y_array"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-07-02T21:59:16.936739Z",
     "end_time": "2024-07-02T21:59:16.999664Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化正弦函数\n",
    "plt.plot(x_array, y_array, marker='.',\n",
    "         markersize=8,\n",
    "         markerfacecolor=\"w\",\n",
    "         markeredgecolor='k')\n",
    "plt.text(x_start, -0.1, '0')\n",
    "plt.text(x_end, 0.1, r'$2\\pi$')\n",
    "plt.axhline(y=0, color='k', linestyle='--', linewidth=0.25)\n",
    "plt.axis('off')\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-07-02T21:59:16.953400Z",
     "end_time": "2024-07-02T21:59:17.015617Z"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
